home *** CD-ROM | disk | FTP | other *** search
RISC OS BBC BASIC V Source | 1995-06-22 | 4.4 KB | 185 lines |
- >$.Wimp.Menus
- ************************************
- * Using Menus in the WIMP System *
- * By Adrian Philip Look *
- * 13th July 1988 *
- ************************************
- ("FX4,0"):
- $;" at line ";
- data% &2000
- these are not imperitive but they do
- make the WIMP system much more presentable
- *PRINT $.Wimp.Palette
- variables
- version=
- wimp_initialise
- main_menu :
- create menu hierarchy
- main polling loop
- "Wimp_ForceRedraw",-1,0,0,1280,1024
- *POINTER
- "Wimp_Poll",,block%
- reason
- wimp_poll(reason)
- variables
- block% &100 :
- a general data block
- menu% &2000 :
- the menu structure data block
- text% 12 :
- a data block for holding my text entry
- text$(50),setting(50),flags(50),data(50)
- submenu(50),ref(50),menupos(20)
- ( menu_title_fg=13 :
- colours
- menu_title_bg=12
- menu_work_fg=7
- menu_work_bg=0
- tick=&01 :
- flag values
- dotted=&02
- writeable=&4
- last=&80
- default=&10021
- shaded=&400000
- menu_variables
- menu_variables
- first=
- second=
- : sel=
- $text%="!default"
- main_menu :
- create 'main' menu using 'short-hand'
- no=0:
- x,y,b
- menu0 (main menu)
- define_menu_text("first",no,0,first,0,0,default,-1,0):no+=1
- define_menu_text("second",no,0,second,-1,0,default,-1,0):no+=1
- define_menu_text("not here",no,0,0,0,-1,default,-1,0):no+=1
- define_menu_text("action",no,0,0,-1,0,default,1,0):no+=1
- define_menu_text("just",no,0,0,0,
- sel,default,-1,0):no+=1
- define_menu_text("some",no,0,0,0,
- sel,default,-1,0):no+=1
- define_menu_text("text",no,0,0,0,
- sel,default,2,-1):no+=1
- menu1
- define_menu_text("menu1",no,0,0,0,0,0,-1,-1):no+=1
- define_menu_text("deselect",no,0,
- sel,0,
- sel,default,-1,0):no+=1
- define_menu_text("select",no,0,sel,-1,sel,default,-1,0):no+=1
- define_menu_text("leave",no,0,0,0,0,default,-1,-1):no+=1
- menu2
- define_menu_text("text",no,0,0,0,0,0,-1,-1):no+=1
- define_menu_text("text%(12)",no,-1,0,0,0,default,-1,-1):no+=1
- create menu structure
- create_menu("adrian",no,x,y)
- decoding the short hand
- define_menu_text(text$,n,w,t,d,s,flags,sm,l)
- text$(n)=text$
- setting(n)=0
- setting(n)=setting(n)
- writeable:flags=flags
- &100
- setting(n)=setting(n)
- tick
- setting(n)=setting(n)
- dotted
- setting(n)=setting(n)
- last
- flags=flags
- shaded
- flags(n)=flags
- submenu(n)=sm
- creating the menu structure data block
- create_menu(title$,n,x,y)
- mb%=menu%
- menus=0:q=0
- menupos(menus)=mb%:menus+=1
- $mb%=title$
- mb%?12=menu_title_fg
- mb%?13=menu_title_bg
- mb%?14=menu_work_fg
- mb%?15=menu_work_bg
- l&mb%!16=224 :
- width of menu items
- m'mb%!20=40 :
- height of menu items
- nAmb%!24=10 :
- vertical gap between items (also top & bottom)
- itemptr=mb%+28
- itemptr!0=setting(q)
- ref(q)=itemptr+4
- t<itemptr!8=flags(q)
- menu_work_bg<<28
- menu_work_fg<<24
- (flags(q)
- &100)=0
- $(itemptr+12)=text$(q)
- text$(q),"(")
- y"itemptr!12=
- text$(q),pos-1))
- itemptr!16=-1
- {,itemptr!20=
- text$(q),
- (text$(q))-pos))
- itemptr+=24:q+=1
- (setting(q-1)
- last)>0
- mb%=itemptr
- q<>n
- title$=text$(q):q+=1
- q=0
- submenu(q)>0
- submenu(q)<menus
- !ref(q)=menupos(submenu(q))
- !ref(q)=-1
- "Wimp_CreateMenu",,menu%,x,y
- servicing the Wimp_Poll routine
- wimp_poll(reason)
- reason
- 2 :
- open_window(!block%)
- 3 :
- close_window(!block%)
- 6 :
- (block%!8)
- main_menu :
- if MENU pressed pop up the menu
- 9 :
- menu_action :
- decode the menu
- wimp_initialise
- version%
- "Wimp_Initialise",0
- version%
- =version%/100
- open_window(handle)
- block%!0=handle
- "Wimp_OpenWindow",,block%
- close_window(handle)
- !block%=handle
- "Wimp_CloseWindow",,block%
- decode the item_selected_list
- menu_action
- level0=block%!0
- level1=block%!4
- level0
- 0 : first=
- first
- 1 : second=
- second
- 3 :
- level1
-
- 0,1 : sel=
-
- 2 :
- close_down
-
- menu_close
- "Wimp_CreateMenu",,-1
- close_down
- "Wimp_CloseDown"
-